package com.english.service;

import com.english.entity.Lesson;
import com.english.entity.LessonLog;
import com.english.entity.StudentRecharge;
import com.english.vo.*;

import java.util.List;
import java.util.Map;
import java.math.BigDecimal;

/**
 * 课时管理服务接口
 *
 * @author wlq
 * @since 2025-08-05
 */
public interface LessonService {

    /**
     * 根据学生ID查询课时信息
     *
     * @param studentId 学生ID
     * @return 课时信息
     */
    Lesson getLessonByStudentId(Long studentId);

    /**
     * 根据学生ID查询课时变动记录
     *
     * @param studentId 学生ID
     * @return 课时变动记录列表
     */
    List<LessonLog> getLessonLogsByStudentId(Long studentId);

    /**
     * 调整学生课时
     *
     * @param adjustVO 课时调整信息
     * @param adminId  管理员ID
     * @return 操作结果
     */
    boolean adjustLesson(LessonAdjustVO adjustVO, Long adminId);

    /**
     * 使用课时
     *
     * @param studentId   学生ID
     * @param hours       使用课时数
     * @param title       操作标题
     * @param description 操作描述
     * @param adminId     管理员ID
     * @return 操作结果
     */
    boolean useLesson(Long studentId, Integer hours, String title, String description, Long adminId);

    /**
     * 获取管理员课时统计数据
     *
     * @return 统计数据
     */
    LessonStatsVO getAdminStats();

    /**
     * 获取学生列表
     *
     * @param keyword 搜索关键词
     * @param filter  过滤条件
     * @return 学生列表
     */
    List<StudentListVO> getStudentList(String keyword, String filter);

    /**
     * 批量调整课时
     *
     * @param operationVO 批量操作信息
     * @param adminId     管理员ID
     * @return 操作结果
     */
    boolean batchAdjust(BatchOperationVO operationVO, Long adminId);

    List<StudentRecharge> getStudentRechargeList();

    void handleStudentRecharge(Long userId, Long adminId, Integer hoursAdded, Integer classId, String processNotes);

    /**
     * 处理学生充值 - 支持多班级课时分配
     * @param userId 学生ID
     * @param adminId 管理员ID
     * @param classHoursMap 班级课时分配映射 (classId -> hours)
     * @param processNotes 处理备注
     */
    void handleStudentRechargeMultiClass(Long userId, Long adminId, Map<Long, Integer> classHoursMap, String processNotes);

    /**
     * 获取班级价格信息
     * @return 班级价格映射
     */
    Map<Long, BigDecimal> getClassPrices();

    /**
     * 获取充值处理日志列表
     *
     * @return 处理日志列表
     */
    List<RechargeProcessLogVO> getRechargeProcessLogs();


    /**
     * 批量充值课时
     *
     * @param batchRechargeVO 批量充值信息
     * @return 操作结果
     */
    boolean batchRecharge(BatchRechargeVO batchRechargeVO, Long adminId);
}


